﻿using System;
using System.Security.Cryptography;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using TVPeruRFIDMovil.Clases.Movil;
using LH.Library;
using TVPeruRFIDMovil.ServicioWS;
using TVPeruRFIDMovil.Clases.Negocio;
using TVPeruRFIDMovil.Herramientas;
using LH.Configuration;
using System.IO;


namespace TVPeruRFIDMovil
{
    public partial class frmLogin : Form
    {
        #region --- Variables y Constantes ---
        private const string FORMATO_FECHAHORA_MOSTRAR = "dd/MM/yyyy HH:mm";
        //private const string NOMBRE = "ERICK";
        //private const string CLAVE = "1234";//"81dc9bdb52d04dc20036dbd8313ed055";
        // private static string llave = ConfigurationManager.GetConfig("SEMILLA");
        #endregion

        #region --- Constructor ---
        public frmLogin()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos Formulario ---
        private void frmLogin_Load(object sender, EventArgs e)
        {
            cargarFormulario();
        }

        private void mnuEntrar_Click(object sender, EventArgs e)
        {
            entrar();
        }

        private void mnuSalir_Click(object sender, EventArgs e)
        {
            salir();
        }

        private void btnExClave_Click(object sender, EventArgs e)
        {
            MetodosAplicacion.tecladoVisible(this.txtUsuario);
        }

        private void btnExUsuario_Click(object sender, EventArgs e)
        {
            MetodosAplicacion.tecladoVisible(this.txtUsuario);
        }

        private void tmrFechaHora_Tick(object sender, EventArgs e)
        {
            obtenerFechaHora();
        }
        #endregion

        #region --- Metodos Propios ---

        private void cargarFormulario()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                MetodosAplicacion.configuraFormulario(this);

                this.picLogo.Width = Screen.PrimaryScreen.Bounds.Width - 70;
                this.picLogo.SizeMode = PictureBoxSizeMode.StretchImage;
                this.picLogo.Refresh();

                this.txtUsuario.Focus();
                obtenerFechaHora();

                this.tmrFechaHora.Enabled = true;
                this.tmrFechaHora.Interval = 5000;

                cargarAlmacen();

                this.Refresh();
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void cargarAlmacen()
        {
            Almacen[] listaAlmacen = null;

            using (Interfase interfase = new Interfase())
            {
                listaAlmacen = interfase.listarAlmacen();
            }

            this.cboAlmacen.DataSource = listaAlmacen;
            this.cboAlmacen.ValueMember = Constantes.GENERAL_CODIGO;
            this.cboAlmacen.DisplayMember = Constantes.GENERAL_DESCRIPCION;
        }

        private void obtenerFechaHora()
        {
            this.lblFechaHora.Text = DateTime.Now.ToString(FORMATO_FECHAHORA_MOSTRAR);
        }

        private bool validarEntradas()
        {
            this.txtUsuario.Text = this.txtUsuario.Text.Trim();
            this.txtClave.Text = this.txtClave.Text.Trim();

            if (this.txtUsuario.Text.Equals(string.Empty))
            {
                Util.CampoNecesario(this.txtUsuario, "Debe ingresa su usuario", this.Text);
                return false;
            }

            if (this.txtClave.Text.Equals(string.Empty))
            {
                Util.CampoNecesario(this.txtClave, "Debe ingresar su clave", this.Text);
                return false;
            }

            return true;
        }

        private void entrar()
        {
            if (!validarEntradas()) { return; }

            Usuario usuarioEnviar = null;
            int usuarioObtenido = 0;
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                usuarioEnviar = new Usuario();
                usuarioEnviar.nomUser = this.txtUsuario.Text;
                usuarioEnviar.passUser = this.txtClave.Text;

                using (Interfase interfase = new Interfase())
                {
                    usuarioObtenido = interfase.validarUsuario(usuarioEnviar);

                    if (usuarioObtenido > 0)
                    {
                        ParametrosAplicacion.USUARIO_ACTUAL = new Usuario();
                        ParametrosAplicacion.USUARIO_ACTUAL.idUsuario = usuarioObtenido;

                        ParametrosAplicacion.ALMACEN_ACTUAL = (Almacen)this.cboAlmacen.SelectedItem;

                        //Util.ShowMessageboxInfo("Bienvenido: " + usuarioObtenido.nombre, this.Text);

                        using (frmMenuPrincipal2 frmMenuPrincipal2 = new frmMenuPrincipal2())
                        {
                            frmMenuPrincipal2.ShowDialog();
                        }

                        limpiarTodo();
                    }
                    else
                    {
                        ParametrosAplicacion.USUARIO_ACTUAL = null;
                        ParametrosAplicacion.ALMACEN_ACTUAL = null;

                        Util.ShowMessageboxExclamacion("Usuario o Clave incorrecta, vuelva a ingresar sus datos", this.Text);
                    }
                }
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void limpiarTodo()
        {
            this.txtUsuario.Text = string.Empty;
            this.txtClave.Text = string.Empty;
            this.cboAlmacen.SelectedIndex = 0;
        }

        private void salir()
        {
            Application.Exit();
        }

        #endregion       

    }
}